<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> -->
    <script src="../node_modules/vue/dist/vue.global.js"></script>
</head>

<body>
    <div id="app">
        <!-- 使用子组件 -->
        <p>父组件msg: {{msg}}</p>
        <part v-model:title="msg"></part>
    </div>
</body>

</html>
<script>
    // 子组件接收父组件中的msg , 属性名为 modelValue, 子组件上的v-model的value 写成计算属性
    // 当初始渲染也就是访问value 时, 执行计算属性的get方法. 值为  this.modelValue
    // 当修改value , 执行的set 方法, 触发 子传父, 实现修改父组件中的msg 值

    const { createApp } = Vue;
    const vm = createApp({
        data() {
            return {
                msg: '马英九访问湖南认祖'
            }
        },
        components: {
            part: {
                template: `<div>
                                我是子组件
                                <input type='text' v-model='value'/>
                            </div>`,
                props: ['title'],// 接收父组件中的msg  父传子 名称是固定的,不能修改 
                emits: ['update:title'], // 自定自定义事件,事件名就是'update:modelValue' 定义子传父事件
                computed: {
                    value: { // 计算属性名
                        get() {
                            return this.title
                        },
                        set(value) {
                            this.$emit('update:title', value)
                        }
                    }

                }
            },
        }


    });

    //挂载根实例到根节点
    vm.mount('#app')

</script>